// 定义一个泛型结构体 Point，它有两个泛型参数 T 和 U
struct Point<T, U> {
    x: T,
    y: U,
}

impl<T, U> Point<T, U> {
    // 定义一个方法获取 x 坐标的引用
    fn x(&self) -> &T {
        &self.x
    }

    // 定义一个方法获取 y 坐标的引用
    fn y(&self) -> &U {
        &self.y
    }
}

fn main() {
    // 使用 i32 和 f64 类型实例化 Point
    let int_and_float = Point { x: 5, y: 4.0 };
    let int_and_int = Point { x:5, y:4};
    let float_and_float = Point { x:5.0, y:4.0};

    println!("x = {}", int_and_float.x());
    println!("y = {}", int_and_float.y());
    
    println!("x = {}", int_and_int.x());
    println!("y = {}", int_and_int.y());
    
    println!("x = {}", float_and_float.x());
    println!("y = {}", float_and_float.y());
}